【图像配准】多图配准/不同特征提取算法/匹配器比较测试

您所在的位置:网站首页 opencv 同心圆检测 【图像配准】多图配准/不同特征提取算法/匹配器比较测试

【图像配准】多图配准/不同特征提取算法/匹配器比较测试

2023-04-13 21:22| 来源: 网络整理| 查看: 265

前言

本文首先完成之前专栏前置博文未完成的多图配准拼接任务,其次对不同特征提取器/匹配器效率进行进一步实验探究。

各类算法原理简述

看到有博文[1]指出,在速度方面SIFT计算变换矩阵->图像合并。 那么多图配准,实际上可以分解为多个双图配准。 以下代码主要参考了这个仓库:https://github.com/799034552/concat_pic

下面按处理顺序对各部分内容进行分块拆解:

图像读取

首先是读取图像再进行灰度化转换。 这里进行了一个判断,判断传入的是否是图像的文本路径,这一步主要是为了后面多图拼接的便利性,因为后面多图拼接会把拼接好的部分图像直接放在内存中,这里若不是路径,就直接赋值给变量,相当于用整张大图去和另外一张小图去做拼接。

# 读取图像-转换灰度图用于检测 # 这里做一个文本判断是为了后面多图拼接处理 if isinstance(path2, str): imageA = cv2.imread(path2) else: imageA = path2 if isinstance(path1, str): imageB = cv2.imread(path1) else: imageB = path1 imageA_gray = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY) imageB_gray = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY) 构建特征提取器

OpenCV对各种算法都进行了较好的封装,这里主要对比测试了sift,brisk,orb,akaze这几种算法,所用opencv-python版本为4.7.0,值得注意的是,OpenCV4以后的版本,cv2.SURF_create()无法使用,只能用老版本的cv2.xfeatures2d.SURF_create()来实现SURF,因此这里没有对SURF算法进行比较测试。

# 选择特征提取器函数 def detectAndDescribe(image, method=None): if method == 'sift': descriptor = cv2.SIFT_create() elif method == 'surf': descriptor = cv2.xfeatures2d.SURF_create() # OpenCV4以上不可用 elif method == 'brisk': descriptor = cv2.BRISK_create() elif method == 'orb': descriptor = cv2.ORB_create() elif method == 'akaze': descriptor = cv2.AKAZE_create() (kps, features) = descriptor.detectAndCompute(image, None) return kps, features 提取特征/特征匹配 # 提取两张图片的特征 kpsA, featuresA = detectAndDescribe(imageA_gray, method=feature_extractor) kpsB, featuresB = detectAndDescribe(imageB_gray, method=feature_extractor) # 进行特征匹配 if feature_matching == 'bf': matches = matchKeyPointsBF(featuresA, featuresB, method=feature_extractor) elif feature_matching == 'knn': matches = matchKeyPointsKNN(featuresA, featuresB, ratio=0.75, method=feature_extractor) if len(matches)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3